package main

import (
	"fmt"
	"math/rand"
	"strconv"
	"strings"
	"time"
)

// 创建一个初始长度为0、容量为10的int型切片，调用rand.Intn(128)100次，往切片里面添加100个元素，利用map统计该切片里有多少个互不相同的元素。
// 实现一个函数func arr2string(arr []int) string，比如输入[]int{2,4,6}，返回“2 4 6”。输入的切片可能很短，也可能很长。

func main() {
	count := statistics()
	fmt.Printf("共有%d个互不相同的元素\n", count)

	arr := []int{2, 4, 6}
	fmt.Printf("%s\n", strings.TrimSpace(arr2string(arr)))
	arr1 := []int{}
	fmt.Printf("%s", strings.TrimSpace(arr2string(arr1)))
	arr2 := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
	fmt.Printf("%s", strings.TrimSpace(arr2string(arr2)))
}

func statistics() int {
	var arr = make([]int, 0, 10)
	var arrMap = make(map[int]int, 100)
	rand.Seed(time.Now().UnixNano())
	for i := 0; i < 100; i++ {
		arr = append(arr, rand.Intn(128))
	}
	for _, v := range arr {
		arrMap[v] = v
	}
	return len(arrMap)
}

func arr2string(arr []int) string {
	if len(arr) == 0 {
		return ""
	}
	buf := strings.Builder{}
	for _, v := range arr {
		buf.WriteString(strconv.Itoa(v) + " ")
	}
	return buf.String()
}
